/***************************************************************************
 *   Copyright (C) 2009 by Marian Skvarek   *
 *   skvarek.marian@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A TrackICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#include "CDebug.h"
#include "CUtils.h"
#include "CGlobals.h"

#include <QtGui>

using namespace easyscore::globals;

namespace easyscore
{
	namespace utils
	{
		CDebug* CDebug::mInstance = 0;

		CDebug::CDebug()
		{
			mDebugFile = new QFile ( "debug.log" );
			if ( mDebugFile->open ( QIODevice::ReadWrite | QIODevice::Text ) )
			{
				mDebugStream = new QTextStream ( mDebugFile );
			}

                        mDebugLabel = 0;
		}

		CDebug::~CDebug()
		{
			delete mDebugFile;
			delete mDebugStream;
		}

		CDebug* CDebug::getInstance()
		{
			if ( ! mInstance )
				mInstance = new CDebug();

			return mInstance;
		}

                void CDebug::showDebugText ( QString &s )
		{
                    if(mDebugLabel)
			mDebugLabel->setText ( s );
		}

		void CDebug::writeDebugInfo ( const QString &s )
		{
			if ( DEBUG )
			{
				( *mDebugStream ) << s << "\n";
				mDebugStream->flush();
			}
		}

		/*!
			\fn easyscore::utils::CDebug::assert( bool expr)
		 */
		void CDebug::assert ( bool expr, QString description )
		{
			if ( !expr )
			{
				QString info("Asser failed: ");
				info.append(description);
				writeDebugInfo(info);
			}
		}

	}//namespace utils
}//namespace easyscore
